package main

import "fmt"

// 定义结构体,老师的结构体,各个属性统一放入结构体管理
type Teacher struct {
	// 变量名大写开头外界可以访问
	Name   string
	Age    int
	School string
}

func main() {
	// 创建老师的实例对象
	var t1 Teacher
	fmt.Println(t1) // { 0 }

	t1.Name = "王二狗"
	t1.Age = 45
	t1.School = "清华大学"
	fmt.Println(t1) // {王二狗 45 清华大学}

	// 第二种结构体实例创建
	var t2 Teacher = Teacher{}
	fmt.Println(t2) // { 0 }

	// 第三种创建实例方法,使用指针
	var t3 *Teacher = new(Teacher)
	// t3是指针,其实指向的就是地址,应该给这个地址指向的对象字段赋值
	t3.Name = "王彪" // 底层其实是(*t3).Name = "王彪", 只是为了复合正常程序员的写法
	t3.Age = 28
	fmt.Println(*t3) // {王彪 28 }

	// 第四种方式
	var t4 *Teacher = &Teacher{}
	t4.Name = "二狗"
	t4.Age = 12
	t4.School = "家里蹲大学"
	fmt.Println(*t4) // {二狗 12 家里蹲大学}
}
